Double Quantum Dots#
Now we have what it takes to understand multi-dot quantum devices. We’ll start by taking an extended look at a double-dot system, with two quantum dots aranged in series with source and drain baths on either side.
Classical Model#
To start, we can consider a classical model of the double-dot system. In the Van Der Wiel paper they present a classical model of a double quantum dot system shown in figure 1. This model turns out to be quite accurate in demonstrating the key features of this system.
Fig. 5 A classical model of a double quantum dot presented in the Van Der Wiel paper. The dots are coupled to sources, drains, and each other through a resistor and capacitor in parallel. Each dot is also coupled to a “plunger” that can manipulate the chemical potential of that dot.#
Obviously, this model simplifies things a lot, and is not entirely realistic to the devices that HRL uses (see comparison), but is still a great way to discuss some of the tools used to understand the operation of these devices.
In the Van Der Wiel paper, they develop analytical expressions for the chemical potential \(\mu\) of each dot in terms of the current electron populations, the gate voltages, and the cross capacitances. These equations are (1) and (2), respectively.
The energy \(E_{C1}\) is the increase in the potential energy of dot 1 when an electron tunnels into it. Likewise, \(E_{C2}\) is the increase in the enenrgy of dot 2 when an electron tunnels into it. Lastly, \(E_{Cm}\) is the increase in the energy of one dot when an electron tunnels into the other dot. By defining the chemical potential of the source and drain to be \(\mu=0\), we can understand the behavior of the double dot system using equations (1) and (2). Whenever \(\mu_1 < -E_{C1}\), an electron can (and will) tunnel into dot 1 from the source, while whenever \(\mu_2 < -E_{C2}\), an electron will tunnel into dot 2 from the drain. This will continue until \(0<\mu_1<-E_{C1}\) and \(0 < \mu_2 < E_{C2}\), when neither dot can accept any more electrons. Of course, the only control we have here are the gate voltages for either dot: \(V_{g1}\) and \(V_{g2}\). By modulating these controls, we can affect the stable configuration of electrons the double dot system.
Stability Diagrams#
Stability diagrams are the method used to understand the mapping between \(V_{g1}\), \(V_{g2}\), and the stable configuration of \(N_1\) and \(N_2\). These diagrams follow directly from the discussion of charge sensing in the previous section. Figure 3 (TODO: CHECK FIGURE) on that page shows how we can infer dot population from the number of spikes on a plot of \(dI/dV\), where \(I\) is the current through the dot sensor and \(V\) is the voltage of the plunger. When an electron tunnels into the dot, there is an immediate change in the potential of the sensor dot which causes an immediate change to the current \(I\) and appears as a sharp peak in the plot of \(dI/dV\) vs \(V\).
Stability diagrams are effectively 2D renderings of the same \(dI/dV\) plot, where we are modulating both \(V_{g1}\) and \(V_{g2}\) and plotting \(dI/d(V_{g1}+V_{g2})\) (TODO: Is this true?) using a color map. Below is an example experimental stability diagram from Borselli et al
Fig. 6 Stability diagram from figure 4 of Borselli et al.#
The annotations in the above figure correspond to the stable elecron configurations when gate voltages are anywhere within the indicated regions bounded by the bright lines.
Alternative Understanding of Stability Diagrams
Another way of thinking about charge stability diagrams is by reconceptualizing the spikes on figure 3 in the previous page (TODO: link / check figure) as the plunger voltage at which you have a 50/50 chance of having an additional electron in the dot. In this way, we can think of the lines that seperate two distinct electron configurations on the stability diagrams as paths in voltage space along which either electron configuration is equally likely.
So for instance, the bright line seperating the \((1,1)\) and \((1,0)\) configurations is a set of voltages where we know we have one electron in dot 1, and a 50% change of having an electron in dot 2.
Interactive Stability Diagrams#
Using (1) and (2) we can mathematically simulate stability diagrams for the Van Der Wiel double-dot model, which will allow us to better understand the contributing factors to why these diagrams have the shape that they do.
Warning
None of the interactive plots here will have any sort of realistic parameters, their sole purpose is for you to get a feel for how changing parameters in the device change the resulting stability diagrams.
Show code cell source
import numpy as np
from bokeh.layouts import column, row
from bokeh.models import ColumnDataSource, CustomJS, Slider, MultiLine
from bokeh.plotting import figure, show
from bokeh.io import output_file
from bokeh.resources import CDN
from bokeh.embed import file_html
import IPython
ECHARGE = 1
CG1 = 1
CG2 = 1
CL = 1
CR = 1
CM = 1
C1 = CG1 + CL + CM
C2 = CG2 + CR + CM
EC1 = ECHARGE * ECHARGE / C1 / (1 - CM * CM / C1 / C2)
EC2 = ECHARGE * ECHARGE / C2 / (1 - CM * CM / C2 / C1)
ECM = ECHARGE * ECHARGE / CM / (C1 * C2 / CM / CM - 1)
XLIM = 4
YLIM = 4
v1t1 = []
v2t1 = []
v1t2 = []
v2t2 = []
hexx = []
hexy = []
x1start = ECHARGE * (EC2 / 2 + 0 * ECM - EC1 * EC2 / ECM * (0 + .5)) / (CG1 * ECM - CG1 * EC1 * EC2 / ECM)
y1start = ECHARGE * (EC1 / 2 + 0 * ECM - EC2 * EC1 / ECM * (0 + .5)) / (CG2 * ECM - CG2 * EC2 * EC1 / ECM)
x2start = ECHARGE * (-EC2 / 2 + 1 * ECM - EC1 * EC2 / ECM * (1 - .5)) / (CG1 * ECM - CG1 * EC1 * EC2 / ECM)
y2start = ECHARGE * (-EC1 / 2 + 1 * ECM - EC2 * EC1 / ECM * (1 - .5)) / (CG2 * ECM - CG2 * EC2 * EC1 / ECM)
deltax = (ECM * ECM - EC1 * EC2) / (ECM * CG1 * ECM - CG1 * EC1 * EC2)
deltay = (ECM * ECM - EC1 * EC2) / (ECM * CG2 * ECM - CG2 * EC1 * EC2)
y1start_save = y1start
y2start_save = y2start
while x1start < XLIM + deltax:
while y1start < YLIM + deltay:
v1t1.append(x1start)
v2t1.append(y1start)
v1t2.append(x2start)
v2t2.append(y2start)
hexx.append( [x1start, x2start, x1start, x2start-deltax, x1start-deltax, x2start-deltax, x1start] )
hexy.append( [y1start, y2start-deltay, y1start-deltay, y2start-deltay, y1start, y2start, y1start] )
y1start += deltay
y2start += deltay
x1start += deltax
x2start += deltax
y1start = y1start_save
y2start = y2start_save
source = ColumnDataSource(data=dict(v1t1=v1t1, v2t1=v2t1, v1t2=v1t2, v2t2=v2t2, hexx=hexx, hexy=hexy))
plot = figure(y_range=(0, YLIM), x_range=(0, XLIM), width=400, height=400,
x_axis_label=r"$$V_1\text{ (arbitrary units)}$$",
y_axis_label=r"$$V_2\text{ (arbitrary units)}$$")
hexagons = MultiLine(xs='hexx', ys='hexy', line_color="black")
plot.add_glyph(source, hexagons)
plot.circle(x='v1t1', y='v2t1', color="blue", source=source)
plot.circle(x='v1t2', y='v2t2', color="red", source=source)
cg1_slider = Slider(start=0.4, end=2, value=1, step=.02, title=r"$$C_{g1}$$")
cg2_slider = Slider(start=0.4, end=2, value=1, step=.02, title=r"$$C_{g2}$$")
callback = CustomJS(args=dict(source=source, ECHARGE=ECHARGE, cg1=cg1_slider, cg2=cg2_slider,
cl=1, cr=1, cm=1, XLIM=XLIM, YLIM=YLIM),
code="""
const CM = cm
const CG1 = cg1.value
const CG2 = cg2.value
const CR = cr
const CL = cl
const C1 = CG1 + CL + CM
const C2 = CG2 + CR + CM
const EC1 = ECHARGE * ECHARGE / C1 / (1 - CM * CM / C1 / C2)
const EC2 = ECHARGE * ECHARGE / C2 / (1 - CM * CM / C2 / C1)
const ECM = ECHARGE * ECHARGE / CM / (C1 * C2 / CM / CM - 1)
const v1t1 = []
const v2t1 = []
const v1t2 = []
const v2t2 = []
const hexx = []
const hexy = []
var x1start = ECHARGE * (EC2 / 2 + 0 * ECM - EC1 * EC2 / ECM * (0 + .5)) / (CG1 * ECM - CG1 * EC1 * EC2 / ECM)
var y1start = ECHARGE * (EC1 / 2 + 0 * ECM - EC2 * EC1 / ECM * (0 + .5)) / (CG2 * ECM - CG2 * EC2 * EC1 / ECM)
var x2start = ECHARGE * (-EC2 / 2 + 1 * ECM - EC1 * EC2 / ECM * (1 - .5)) / (CG1 * ECM - CG1 * EC1 * EC2 / ECM)
var y2start = ECHARGE * (-EC1 / 2 + 1 * ECM - EC2 * EC1 / ECM * (1 - .5)) / (CG2 * ECM - CG2 * EC2 * EC1 / ECM)
const deltax = (ECM * ECM - EC1 * EC2) / (ECM * CG1 * ECM - CG1 * EC1 * EC2)
const deltay = (ECM * ECM - EC1 * EC2) / (ECM * CG2 * ECM - CG2 * EC1 * EC2)
const y1start_save = y1start
const y2start_save = y2start
while (x1start < XLIM + deltax) {
while (y1start < YLIM + deltay) {
v1t1.push(x1start)
v2t1.push(y1start)
v1t2.push(x2start)
v2t2.push(y2start)
hexx.push( [x1start, x2start, x1start, x2start-deltax, x1start-deltax, x2start-deltax, x1start] )
hexy.push( [y1start, y2start-deltay, y1start-deltay, y2start-deltay, y1start, y2start, y1start] )
y1start += deltay
y2start += deltay
}
x1start += deltax
x2start += deltax
y1start = y1start_save
y2start = y2start_save
}
source.data = { v1t1, v2t1, v1t2, v2t2, hexx, hexy }
""")
cg1_slider.js_on_change('value', callback)
cg2_slider.js_on_change('value', callback)
html_repr = file_html(row(plot, column(cg1_slider, cg2_slider)), CDN)
IPython.display.HTML(html_repr)
Play around with the simulation above. Looking back to the Van Der Wiel model, notice that the sliders here are adjusting the capacitances between the gate voltages \(V_{g1}\) and \(V_{g2}\) and the dots.
What is the connection to “lever arms”?
If we think of the capacitances as “lever arms,” changing the capacitances between plunger voltages effectively adjusts the “lever arm,” linearly changing how much a change in plunger voltage affects either dot.
This linear change is seen in the stability diagram as a squishing or stretching of the entire plot in either direction. Increasing the capacitance increases the “length” of the “lever arm,” making smaller changes in voltage have a larger affect on the potential, compressing the diagram in a particular direction. Decreasing capacitance decreases the “length” of the “lever arm,” so that achieving the same change in potential requires a greater change in plunger voltage, stretching the plot.
Triple Points
In the same way that we can think of the lines in stability diagrams as corresponding to an equal probability of adjacent charge configurations, the notes (blue and red dots) correspond to an equal probability of three different charge distributions. For instance, on the blue node in the bottom left, the charge configurations \((0,0)\), \((1,0)\), and \((0,1)\) are all equally likely.
This is not particularly relevant for HRL’s applications of quantum dots, but you might note that the blue triple points correspond to the transfer of an electron from left to right \((0,0)\rightarrow (1,0) \rightarrow (0,1) \rightarrow (0,0)\) and the red triple points to the transfer of a hole from right to left, for instance \((2,2) \rightarrow (2,1) \rightarrow (1,2) \rightarrow (2,2)\). See the Van Der Wiel paper for more on this, as well as how the geometry of the cells can be related to the capacitances in the model.
Reading Charge Configurations from Stability Diagrams
This has been touched upon already, but it is important to note that bound areas in these diagrams correspond to particular configurations of charge within the dots. This is illustrated below.
Fig. 7 This diagram from figure 2b of the Van Der Wiel paper illustrates how the areas bound by the stability diagram correspond to electron populations in each dot.#
Check out a similar simulation below with more parameters to play with.
Show code cell source
import numpy as np
from bokeh.layouts import column, row
from bokeh.models import ColumnDataSource, CustomJS, Slider, MultiLine
from bokeh.plotting import figure, show
from bokeh.io import output_file
from bokeh.resources import CDN
from bokeh.embed import file_html
import IPython
ECHARGE = 1
CG1 = 1
CG2 = 1
CL = 1
CR = 1
CM = 1
C1 = CG1 + CL + CM
C2 = CG2 + CR + CM
EC1 = ECHARGE * ECHARGE / C1 / (1 - CM * CM / C1 / C2)
EC2 = ECHARGE * ECHARGE / C2 / (1 - CM * CM / C2 / C1)
ECM = ECHARGE * ECHARGE / CM / (C1 * C2 / CM / CM - 1)
XLIM = 4
YLIM = 4
v1t1 = []
v2t1 = []
v1t2 = []
v2t2 = []
hexx = []
hexy = []
x1start = ECHARGE * (EC2 / 2 + 0 * ECM - EC1 * EC2 / ECM * (0 + .5)) / (CG1 * ECM - CG1 * EC1 * EC2 / ECM)
y1start = ECHARGE * (EC1 / 2 + 0 * ECM - EC2 * EC1 / ECM * (0 + .5)) / (CG2 * ECM - CG2 * EC2 * EC1 / ECM)
x2start = ECHARGE * (-EC2 / 2 + 1 * ECM - EC1 * EC2 / ECM * (1 - .5)) / (CG1 * ECM - CG1 * EC1 * EC2 / ECM)
y2start = ECHARGE * (-EC1 / 2 + 1 * ECM - EC2 * EC1 / ECM * (1 - .5)) / (CG2 * ECM - CG2 * EC2 * EC1 / ECM)
deltax = (ECM * ECM - EC1 * EC2) / (ECM * CG1 * ECM - CG1 * EC1 * EC2)
deltay = (ECM * ECM - EC1 * EC2) / (ECM * CG2 * ECM - CG2 * EC1 * EC2)
y1start_save = y1start
y2start_save = y2start
while x1start < XLIM + deltax:
while y1start < YLIM + deltay:
v1t1.append(x1start)
v2t1.append(y1start)
v1t2.append(x2start)
v2t2.append(y2start)
hexx.append( [x1start, x2start, x1start, x2start-deltax, x1start-deltax, x2start-deltax, x1start] )
hexy.append( [y1start, y2start-deltay, y1start-deltay, y2start-deltay, y1start, y2start, y1start] )
y1start += deltay
y2start += deltay
x1start += deltax
x2start += deltax
y1start = y1start_save
y2start = y2start_save
source = ColumnDataSource(data=dict(v1t1=v1t1, v2t1=v2t1, v1t2=v1t2, v2t2=v2t2, hexx=hexx, hexy=hexy))
plot = figure(y_range=(0, YLIM), x_range=(0, XLIM), width=400, height=400,
x_axis_label=r"$$V_1\text{ (arbitrary units)}$$",
y_axis_label=r"$$V_2\text{ (arbitrary units)}$$")
hexagons = MultiLine(xs='hexx', ys='hexy', line_color="black")
plot.add_glyph(source, hexagons)
plot.circle(x='v1t1', y='v2t1', color="blue", source=source)
plot.circle(x='v1t2', y='v2t2', color="red", source=source)
cm_slider = Slider(start=0.02, end=10, value=1, step=.02, title=r"$$C_M$$")
cg1_slider = Slider(start=0.4, end=2, value=1, step=.02, title=r"$$C_{g1}$$")
cg2_slider = Slider(start=0.4, end=2, value=1, step=.02, title=r"$$C_{g2}$$")
cl_slider = Slider(start=0.02, end=10, value=1, step=.02, title=r"$$C_L$$")
cr_slider = Slider(start=0.02, end=10, value=1, step=.02, title=r"$$C_R$$")
callback = CustomJS(args=dict(source=source, ECHARGE=ECHARGE, cg1=cg1_slider, cg2=cg2_slider,
cl=cl_slider, cr=cr_slider, cm=cm_slider, XLIM=XLIM, YLIM=YLIM),
code="""
const CM = cm.value
const CG1 = cg1.value
const CG2 = cg2.value
const CR = cr.value
const CL = cl.value
const C1 = CG1 + CL + CM
const C2 = CG2 + CR + CM
const EC1 = ECHARGE * ECHARGE / C1 / (1 - CM * CM / C1 / C2)
const EC2 = ECHARGE * ECHARGE / C2 / (1 - CM * CM / C2 / C1)
const ECM = ECHARGE * ECHARGE / CM / (C1 * C2 / CM / CM - 1)
const v1t1 = []
const v2t1 = []
const v1t2 = []
const v2t2 = []
const hexx = []
const hexy = []
var x1start = ECHARGE * (EC2 / 2 + 0 * ECM - EC1 * EC2 / ECM * (0 + .5)) / (CG1 * ECM - CG1 * EC1 * EC2 / ECM)
var y1start = ECHARGE * (EC1 / 2 + 0 * ECM - EC2 * EC1 / ECM * (0 + .5)) / (CG2 * ECM - CG2 * EC2 * EC1 / ECM)
var x2start = ECHARGE * (-EC2 / 2 + 1 * ECM - EC1 * EC2 / ECM * (1 - .5)) / (CG1 * ECM - CG1 * EC1 * EC2 / ECM)
var y2start = ECHARGE * (-EC1 / 2 + 1 * ECM - EC2 * EC1 / ECM * (1 - .5)) / (CG2 * ECM - CG2 * EC2 * EC1 / ECM)
const deltax = (ECM * ECM - EC1 * EC2) / (ECM * CG1 * ECM - CG1 * EC1 * EC2)
const deltay = (ECM * ECM - EC1 * EC2) / (ECM * CG2 * ECM - CG2 * EC1 * EC2)
const y1start_save = y1start
const y2start_save = y2start
while (x1start < XLIM + deltax) {
while (y1start < YLIM + deltay) {
v1t1.push(x1start)
v2t1.push(y1start)
v1t2.push(x2start)
v2t2.push(y2start)
hexx.push( [x1start, x2start, x1start, x2start-deltax, x1start-deltax, x2start-deltax, x1start] )
hexy.push( [y1start, y2start-deltay, y1start-deltay, y2start-deltay, y1start, y2start, y1start] )
y1start += deltay
y2start += deltay
}
x1start += deltax
x2start += deltax
y1start = y1start_save
y2start = y2start_save
}
source.data = { v1t1, v2t1, v1t2, v2t2, hexx, hexy }
""")
cm_slider.js_on_change('value', callback)
cg1_slider.js_on_change('value', callback)
cg2_slider.js_on_change('value', callback)
cl_slider.js_on_change('value', callback)
cr_slider.js_on_change('value', callback)
html_repr = file_html(row(plot, column(cm_slider, cg1_slider, cg2_slider, cl_slider, cr_slider)), CDN)
IPython.display.HTML(html_repr)
Guiding Questions#
What happens when \(\; C_m >> C_{L}, C_{R}\)?
In this limit, the distinction between the dots begins to blur. With strongly coupled dots, any change to \(V_{g1}\) the total “lever arm” between plunger one (\(V_{g1}\)) and dot one is effectively the same as that between plunger one and dot two. The same goes for the “lever arm” between plunger two (\(V_{g2}\)) and the dots.
In the limit, it becomes almost meaningless to consider the dots as seperate entities, an electron in one dot is effectively spread out across both of the dots. What you really have is a single large quantum dot attatched to two plungers.
Fig. 8 This diagram is from figure 2c of the Van Der Wiel paper. Notice the dashed lines between configurations like \((2,0)\), \((1,1)\), and \((0,2)\), underscoring that these configurations for all intents and purposes are indistinguishable in this limit.#
What happens as \(\; C_m\rightarrow 0\)?
In this limit, effectively act as individual dots that are not coupled to each other in any way. The lack of diagonal lines on the stability diagram indicates that \(V_{g1}\) and \(V_{g2}\) are affecting only dot 1 and 2 (respectively), and there is no cross capacitance at all between the dots.
Fig. 9 This diagram is from figure 2a of the Van Der Wiel paper.#
What happens as \(\;C_R/C_L\rightarrow 0\)? Or \(\;C_L/C_R\rightarrow 0\)?
[TODO: ADD EXPLAINATION]
Comparing HRL’s Devices to the Van Der Wiel Model#
Obviously the Van Der Wiel model is incredibly simplistic, but it does a pretty good job demonstrating key features of placing quantum dots in series with one another. There is however, one huge difference between HRL’s devices (as well as similar devices like the one described in Borselli et al): HRL’s devices do not use resistors between dots. Instead, electrons trying to pass from one dot to the next must overcome a potential barrier introduced by a seperate “gate” electrode which can also be modulated. See the next page on multi-dot arrays for further discussion of HRL-specific quantum dot arrays and device operation.
Fig. 10 Diagram of the SLEDGE device from figure 1 in the Ha Ha paper. This diagram is perhaps a bit overly complicated for the point being made, but the key thing to notice is that there are not microscopic resistors seperating the dots (labeled “P” in panel B), but rather smaller dots (labeled “X” in panel B), whose potentials can be raised/lowered to mediate the transport of electrons between dots. See the paper for more information about this diagram.#
Quantum Effects#
We are now in a position to discuss some of the oddities of experimental stability diagrams, much of which arise from the quantum nature of the structure that we are dealing with. In particular, the confinement of electrons into quantum dots means that there is a discrete energy spectrum which is available to the electrons [TODO: EXTERNAL RESOURCES?], and so an electron cannot just jump into a dot whenever it has enough energy to do so. In order for an electron to hop into the dot, it must both have enough energy and there must be an available energy level in the dot that the electron can access.
Fortunately, the effect of the discrete energy spectrum is relatively minimal on the overall stability diagram, mostly appearing in a smoothing out of the stability lines near triple points.
There is another effect that is quantum but has more to do with the implementation. As mentioned above these devices do not actually contain any resistors, instead modulating electron travel with potential barriers. Because of this, as we continue adding higher energy electrons, the electrons we add are less and less confined to staying within their dot. This effect is apparent in the figure presented by Borselli et al as well as the figure below where the lines in the top right of the plots begin to smooth out, as though there were a high mutual capacitance between the dots. In effect that is what it means for the electrons to be less confined: that they have a greater effect on the components around them.
Lastly, you should note that in both the figure from Borselli et al as well as below, the diagonal lines connecting triple points appear to be non-existent. This is not actually a physical effect so much as a consequence of how the plots were made. In constructing these plots, they swept the mutual plunger voltages \(V_1+V_2\), scanning the sensor dot diagonally on the plot. This means that even though there is a jump in current for the sensor dot if you travel across the boundary, this jump was not picked up on by the sweep since the sweep went along the line of where such a jump would be. (TODO: this is poorly explained)
Fig. 11 Experimental stability diagram from figure 4 in the Ha Ha paper. Notice the smoothing out of the lines - the areas enclosed are no longer perfect hexagons. Also, notice how the diagonal lines between the \((n,m)\) area and the \((n+1,m+1)\) area are almost non-existent.#
To learn more about these effects, check out [TODO: external resources].
Cross Capacitances#
There is however, a large physical inaccuracy in the Van Der Weil model: each components is only modeled as being capacitively coupled to adjacent components. In reality, every electrode on the device will have some capacitance between itself and every other part of the device. In the schematic shown in figure 1, we might imagine adding capacitors between \(V_{g2}\) and \(N_2\); \(V_{g1}\) and \(N_1\); \(S\) and \(N_2\); and \(N_1\) and \(D\). The notion of every electrical component having some capacitance with every other electrical component is what is referred to by cross capacitance. You can imagine how complicated these cross capacitances get when dealing with the number of electrodes shown in figure 4.
To demonstrate the effect of these cross capacitances, we have visualized some of the effects in an animation below. We show a device much like the one in figure 4 but with only a two dots (\(P0\) and \(P1\)), mediated from the source and the drain by three gates (\(X0\), \(X1\), and \(X2\)). We then plot on the \(z\)-axis the electric potential at every point in the semiconductor layer where electrons live and traverse the device. Then, we show the effects as we wiggle some of the gate voltages. This is not a quantatiative plot, but rather a qualitative demonstration of how small changes in any one of the gate voltages really do affect the potential at every single point in the device. [TODO: more explainations about complications (cross capacitance between the electrodes themselves?)]
Show code cell source
from IPython.display import Video
Video("./gatepot.mp4", embed=True, width=800)